package com.best.member.utils;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import com.best.core.utils.RedisUtil;
import com.wf.captcha.ArithmeticCaptcha;
import com.wf.captcha.ChineseGifCaptcha;
import com.wf.captcha.GifCaptcha;
import com.wf.captcha.SpecCaptcha;
import com.wf.captcha.base.Captcha;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * @ClassName: CaptchaUtil
 * @Description: 验证码工具类
 * @Datetime: 2020/6/13 14:11
 * @Author: nike
 */
public class CaptchaUtil {
    /**
     * 验证码工具类,前后端分离建议使用redis保存验证码
     *  统一返回 map集合
     *  KEY:verCode 验证码结果
     *  KEY:imgUrl base64验证码图片
     *
     *           类型                       描述
     *  Captcha.TYPE_DEFAULT           数字和字母混合
     *  Captcha.TYPE_ONLY_NUMBER       纯数字
     *  Captcha.TYPE_ONLY_CHAR         纯字母
     *  Captcha.TYPE_ONLY_UPPER        纯大写字母
     *  Captcha.TYPE_ONLY_LOWER        纯小写字母
     *  Captcha.TYPE_NUM_AND_UPPER     数字和大写字母
     *
     *  字体:
     *  Captcha.FONT_1
     *  Captcha.FONT_2
     *  Captcha.FONT_3
     *  Captcha.FONT_4
     *  Captcha.FONT_5
     *  Captcha.FONT_6
     *  Captcha.FONT_7
     *  Captcha.FONT_8
     *  Captcha.FONT_9
     *  Captcha.FONT_10
     */

    /**
     * 获取gif格式的验证码图片
     * @return
     */
    public static Map<String, Object> getGif() {
        // gif类型
        GifCaptcha captcha = new GifCaptcha(130, 48);
        captcha.setCharType(Captcha.TYPE_DEFAULT);
        String verCode = captcha.text();

        Map<String, Object> map = new HashMap<>();
        map.put("verCode", verCode);
        map.put("imgUrl", captcha.toBase64());

        return map;
    }

    /**
     * 获取取算术类型格式的验证码图片
     * 
     * @return
     */
    public static Map<String, Object> getArithmetic() {
        // 算术类型
        ArithmeticCaptcha captcha = new ArithmeticCaptcha(130, 40);
        captcha.setLen(3); // 几位数运算，默认是两位
        captcha.getArithmeticString(); // 获取运算的公式：3+2=?
        String verCode = captcha.text();// 获取运算的结果：5

        Map<String, Object> map = new HashMap<>();
        map.put("verCode", verCode);
        map.put("imgUrl", captcha.toBase64());

        return map;
    }

    /**
     * 获取中文gif类型验证码
     * @return
     */
    public static Map<String, Object> getChinese() {
        // 中文gif类型
        ChineseGifCaptcha captcha = new ChineseGifCaptcha(130, 48);
        String verCode = captcha.text();

        Map<String, Object> map = new HashMap<>();
        map.put("verCode", verCode);
        map.put("imgUrl", captcha.toBase64());

        return map;
    }

    /**
     * 获取png类型验证码
     * @return
     */
    public static Map<String, Object> getPng() {
        // png类型
        SpecCaptcha captcha = new SpecCaptcha(130, 48, 5);
        String verCode = captcha.text().toLowerCase();

        Map<String, Object> map = new HashMap<>();
        map.put("verCode", verCode);
        map.put("imgUrl", captcha.toBase64());

        return map;
    }

}
